package model.interfaces;

import model.dao.HibernateDAOFactory;
import model.dao.usuario.HibernateUsuarioDAO;
import model.interfaces.admin.AdminDAO;
import model.interfaces.reprodutivo.CoberturaDAO;
import model.interfaces.reprodutivo.DestinoDAO;
import model.interfaces.reprodutivo.LeitaoDAO;
import model.interfaces.reprodutivo.LeitegadaDAO;
import model.interfaces.reprodutivo.ObsLeitegadaDAO;
import model.interfaces.reprodutivo.ParicaoDAO;
import model.interfaces.reprodutivo.PesoDAO;
import model.interfaces.reprodutivo.PorcaDAO;
import model.interfaces.reprodutivo.RacaDAO;
import model.interfaces.reprodutivo.ReprodutorDAO;
import model.interfaces.reprodutivo.SuinoDAO;
import model.interfaces.reprodutivo.TecnicoResponsavelDAO;
import model.interfaces.reprodutivo.TentativaDAO;
import model.interfaces.usuario.UsuarioDAO;
import model.vos.usuario.Usuario;

public abstract class DAOFactory {
	public static final int HIBERNATE = 1;
	
	public static final int JDBC = 2;
	
	public abstract void iniciarTransacao();

	public abstract void cancelarTransacao();

	public abstract void encerrar();

	public abstract UsuarioDAO getUsuarioDAO();

	public abstract AdminDAO getAdminDAO();

	public abstract CoberturaDAO getCoberturaDAO();

	public abstract DestinoDAO getDestinoDAO();

	public abstract LeitaoDAO getLeitaoDAO();

	public abstract LeitegadaDAO getLeitegadaDAO();

	public abstract ObsLeitegadaDAO getObsLeitegadaDAO();

	public abstract ParicaoDAO getParicaoDAO();

	public abstract PesoDAO getPesoDAO();

	public abstract PorcaDAO getPorcaDAO();

	public abstract RacaDAO getRacaDAO();

	public abstract ReprodutorDAO getReprodutorDAO();

	public abstract SuinoDAO getSuinoDAO();

	public abstract TecnicoResponsavelDAO getTecnicoResponsavelDAO();

	public abstract TentativaDAO getTentativaDAO();

	public static DAOFactory getDAOFactory(int qualFabrica) {

		switch (qualFabrica) {
		case HIBERNATE:
			return new HibernateDAOFactory();
		default:
			return null;
		}
	}
	public abstract HibernateGenericDAO getDAO(Object o);
}
